﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using com.creditos.be.liclBases;
using System.Web.UI.MobileControls;
using System.Collections.Generic;

public partial class solcred_controles_UCEntidades : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public void CargarEntidadesTotales(DeudasGeneralesSBS deudas, Calificacion Cal)
    {
        //DeudasGeneralesSBS deudas = (DeudasGeneralesSBS)Session["DeudasResumen"];
        if (deudas != null && deudas.MorosidadList.Count != 0)
        {
            List<DeudaSBS> MorosidadList = deudas.MorosidadList;
            List<DeudaSBS> MorosidadTempList = new List<DeudaSBS>();
            MorosidadList.RemoveAll(encuentra);

            decimal soles, dolares, totalMonedaNacional;
            foreach (DeudaSBS var in MorosidadList)
            {
                if (!MorosidadTempList.Exists(delegate(DeudaSBS d) { return d.NombreEntidad == var.NombreEntidad; }))
                {
                    soles = sumaLista(MorosidadList, Importe.Soles, var.NombreEntidad);
                    dolares = sumaLista(MorosidadList, Importe.Dolares, var.NombreEntidad);
                    totalMonedaNacional = soles + dolares * Cal.CalTipoCambio;
                    MorosidadTempList.Add(new DeudaSBS(var.NombreEntidad, dolares, soles, totalMonedaNacional));
                }

            }

            MorosidadTempList.RemoveAll(delegate(DeudaSBS _d) { return (_d.NombreEntidad == null || _d.NombreEntidad == string.Empty); });

            decimal totalSoles = 0;
            decimal totalDolares = 0;
            decimal sumTotSoles = 0;
            decimal sumTotDol = 0;
            decimal sumTotMonedaNacional = 0;
            totalSoles = sumaLista(MorosidadTempList, Importe.Soles);
            totalDolares = sumaLista(MorosidadTempList, Importe.Dolares);
            totalMonedaNacional = totalSoles + totalDolares * Cal.CalTipoCambio;

            for (int i = 0; i < MorosidadTempList.Count; i++)
            {
                if (i != MorosidadTempList.Count - 1)
                {
                    decimal porcentajesoles;
                    decimal porcentajedolares;
                    decimal porcentajeTotalSoles;

                    porcentajesoles = porcentaje(MorosidadTempList[i].ImpReportSoles, totalSoles);
                    porcentajedolares = porcentaje(MorosidadTempList[i].ImpReportDolares, totalDolares);
                    porcentajeTotalSoles = porcentaje(MorosidadTempList[i].TotalMonedaSoles, totalMonedaNacional);
                    sumTotSoles = sumTotSoles + porcentajesoles;
                    sumTotDol = sumTotDol + porcentajedolares;
                    sumTotMonedaNacional = sumTotMonedaNacional + porcentajeTotalSoles;
                    MorosidadTempList[i].PorcentajeDeudaDolares = porcentajedolares;
                    MorosidadTempList[i].PorcentajeDeudaSoles = porcentajesoles;
                    MorosidadTempList[i].PorcentajeTotalSoles = porcentajeTotalSoles;
                }
                else
                {

                    MorosidadTempList[i].PorcentajeDeudaSoles = totalSoles == 0 ? 0 : (decimal.Parse("100.00") - sumTotSoles);
                    MorosidadTempList[i].PorcentajeDeudaDolares = totalDolares == 0 ? 0 : (decimal.Parse("100.00") - sumTotDol);
                    MorosidadTempList[i].PorcentajeTotalSoles = (totalSoles + Cal.CalTipoCambio * totalDolares) == 0 ? 0 : (decimal.Parse("100.00") - sumTotMonedaNacional);
                }
            }

            decimal porcentajesoles100 = 0;
            decimal porcentajedolares100 = 0;
            decimal porcentajeMonedaNacional100 = 0;
            porcentajesoles100 = totalSoles == 0 ? decimal.Parse("0.00") : decimal.Parse("100.00");
            porcentajedolares100 = totalDolares == 0 ? decimal.Parse("0.00") : decimal.Parse("100.00");
            porcentajeMonedaNacional100 = (totalSoles + Cal.CalTipoCambio * totalDolares) == 0 ? decimal.Parse("0.00") : decimal.Parse("100.00");

            if (MorosidadTempList.Count > 0)
                MorosidadTempList.Add(new DeudaSBS("T O T A L   G E N E R A L", totalDolares, totalSoles, totalSoles + Cal.CalTipoCambio * totalDolares, porcentajesoles100, porcentajedolares100, porcentajeMonedaNacional100));

            UIBindable.Bind(this.gvMorosidadSBS, MorosidadTempList);
            this.MorosidadList = MorosidadTempList;
        }
        else
        {
            UIBindable.Bind(this.gvMorosidadSBS, null);
            this.MorosidadList = null;
        }
    }
    public void MostrarDatos(List<DeudaSBS> lst)
    {
        UIBindable.Bind(this.gvMorosidadSBS, lst);
    }
    private decimal sumaLista(List<DeudaSBS> MorosidadList, Importe importe, string nombreEntidad)
    {
        decimal suma = 0;
        if (importe == Importe.Soles)
        {
            foreach (DeudaSBS var in MorosidadList)
            {
                if (var.NombreEntidad == nombreEntidad)
                    suma += var.ImpReportSoles;
            }
        }
        else
        {
            foreach (DeudaSBS var in MorosidadList)
            {
                if (var.NombreEntidad == nombreEntidad)
                    suma += var.ImpReportDolares;
            }

        }
        return suma;

    }
    private decimal sumaLista(List<DeudaSBS> MorosidadList, Importe importe)
    {
        decimal suma = 0;
        if (importe == Importe.Soles)
        {
            foreach (DeudaSBS var in MorosidadList)
            {
                suma += var.ImpReportSoles;
            }
        }
        else
        {
            foreach (DeudaSBS var in MorosidadList)
            {
                suma += var.ImpReportDolares;
            }

        }
        return suma;

    }
    private decimal porcentaje(decimal Importe, decimal totalImporte)
    {
        decimal porcentajemoneda = totalImporte == 0 ? 0 : (Importe / totalImporte * 100);
        return porcentajemoneda;
    }
    private bool encuentra(DeudaSBS d)
    {
        if (d.CodCuentaSBS.ToString().Substring(0, 2) != "14")
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    private enum Importe
    {
        Soles, Dolares
    }
    private List<DeudaSBS> MorosidadListField;
    public List<DeudaSBS> MorosidadList
    {
        get { return (List<DeudaSBS>)Session["_deudaSBS"]; }
        set { Session["_deudaSBS"] = MorosidadListField = value; }
    }

    protected void gvMorosidadSBS_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DeudaSBS oDeudas = (DeudaSBS)e.Row.DataItem;
            if (oDeudas.NombreEntidad == "T O T A L   G E N E R A L")
            {
                e.Row.Font.Bold = true;
            }
        }
    }
}
